home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / share / jockey / handlers / nvidia.py < prev    next >
Text File  |  2009-10-25  |  6KB  |  141 lines

  1. # (c) 2008 Canonical Ltd.
  2. # Author: Martin Pitt <martin.pitt@ubuntu.com>
  3. # License: GPL v2 or later
  4.  
  5. import logging
  6.  
  7. from jockey.handlers import KernelModuleHandler
  8. from jockey.xorg_driver import XorgDriverHandler
  9. from jockey.oslib import OSLib
  10. import XKit
  11. from NvidiaDetector.nvidiadetector import NvidiaDetection
  12.  
  13. # dummy stub for xgettext
  14. def _(x): return x
  15.  
  16. class NvidiaDriver(XorgDriverHandler):
  17.     def __init__(self, backend):
  18.         self._free = False
  19.         # use "None" as driver_package, since we have several;
  20.         # LocalKernelModulesDriverDB overwrites it later with the correct
  21.         # package from the modalias lists
  22.         XorgDriverHandler.__init__(self, backend, 'nvidia', None,
  23.             'nvidia', 'nv', {'NoLogo': 'True'},
  24.             add_modules=['glx'], disable_modules=[],
  25.             remove_modules=['dri', 'GLcore'],
  26.             name=_('NVIDIA accelerated graphics driver'),
  27.             description=_('3D-accelerated proprietary graphics driver for '
  28.                 'NVIDIA cards.'),
  29.             rationale=_('This driver is required to fully utilise '
  30.                 'the 3D potential of NVIDIA graphics cards, as well as provide '
  31.                 '2D acceleration of newer cards.\n\n'
  32.                 'If you wish to enable desktop effects, this driver is '
  33.                 'required.\n\n'
  34.                 'If this driver is not enabled, you will not be able to '
  35.                 'enable desktop effects and will not be able to run software '
  36.                 'that requires 3D acceleration, such as some games.'))
  37.  
  38.         self._recommended = None
  39.         self._do_rebind = False
  40.         
  41.     def id(self):
  42.         '''Return an unique identifier of the handler.'''
  43.  
  44.         if self.package:
  45.             self.version = self.package.split('-')[-1]
  46.             i = 'xorg:' + self.module + '-' + self.version
  47.         else:
  48.             i = 'xorg:' + self.module
  49.         if self.driver_vendor:
  50.             i += ':' + self.driver_vendor.replace(' ', '_')
  51.         return i
  52.  
  53.     def available(self):
  54.         if self.package:
  55.             self.version = self.package.split('-')[-1]
  56.             if int(self.version) < 96:
  57.                 logging.debug('NVIDIA legacy driver not currently supported')
  58.                 return False
  59.         return XorgDriverHandler.available(self)
  60.  
  61.     def enable_config_hook(self):
  62.         # set DefaultDepth to 24; X.org does not work otherwise
  63.         if len(self.xorg_conf.globaldict['Screen']) == 0:
  64.             screen = self.xorg_conf.makeSection('Screen', identifier='Default Screen')
  65.         
  66.         self.xorg_conf.addOption('Screen', 'DefaultDepth', '24', position=0, prefix='')
  67.  
  68.         # version 96 needs AddARGBGLXVisuals
  69.         if self.version == '96':
  70.             self.xorg_conf.addOption('Screen', 'AddARGBGLXVisuals', 'True', optiontype='Option', position=0)
  71.  
  72.         # version 71 needs a couple of extra driver options
  73.         if self.version == '71':
  74.             for opt in ('AllowGLXWithComposite', 'UseEdidFreqs'):
  75.                 self.xorg_conf.addOption('Device', opt, 'True', optiontype='Option', position=0)
  76.         
  77.         # make sure that RGB path is not in the xorg.conf otherwise xorg will crash
  78.         it = 0
  79.         for section in self.xorg_conf.globaldict['Files']:
  80.             try:
  81.                 self.xorg_conf.removeOption('Files', 'RgbPath', position=it)
  82.             except (XKit.xorgparser.OptionException):
  83.                 pass
  84.             it += 1
  85.         
  86.         # remove any Disable "dri2" otherwise nvidia-settings and nvidia-xconfig will fail
  87.         module_sections = self.xorg_conf.globaldict['Module']
  88.         have_modules = len(module_sections) > 0
  89.         
  90.         if have_modules:
  91.             for section in module_sections:
  92.                 self.xorg_conf.removeOption('Module', 'Disable', value='dri2', position=section)
  93.     
  94.     def disable(self):
  95.         # make sure that nvidia-VER-kernel-source is removed too
  96.         XorgDriverHandler.disable(self)
  97.         if self.package:
  98.             flavour = self.package.split('-')[-1]#e.g. 177
  99.             kernel_source = 'nvidia-%s-kernel-source' % (flavour)
  100.             self.backend.remove_package(kernel_source)
  101.             if int(flavour) >= 180:
  102.                 self.backend.remove_package('nvidia-%s-libvdpau' % flavour)
  103.             try:
  104.                 self.backend.remove_package('nvidia-settings')
  105.             except SystemError:
  106.                 pass
  107.  
  108.         return False
  109.     
  110.     def recommended(self):
  111.         if self._recommended == None:
  112.             nd = NvidiaDetection()
  113.             self._recommended = self.package == nd.selectDriver()
  114.         return self._recommended
  115.  
  116.     def enabled(self):
  117.         #if self.xorg_conf has NoneType, AttributeError will be raised
  118.         try:
  119.             devices = self.xorg_conf.globaldict['Device']
  120.             try:
  121.                 driver = self.xorg_conf.getDriver('Device', 0)
  122.             except (XKit.xorgparser.OptionException, XKit.xorgparser.SectionException):
  123.                 driver = None
  124.             if len(devices) == 0 or driver != 'nvidia':
  125.                 return False
  126.         except AttributeError:
  127.             return False
  128.         return KernelModuleHandler.enabled(self)
  129.  
  130.     def enables_composite(self):
  131.         '''Return whether this driver supports the composite extension.'''
  132.  
  133.         # When using an upstream installation, or -new/-legacy etc., we already
  134.         # have composite
  135.         if KernelModuleHandler.module_loaded('nvidia'):
  136.             logging.debug('enables_composite(): already using nvidia driver from nondefault package')
  137.             return False
  138.  
  139.         # neither vesa nor nv support composite, so safe to say yes here
  140.         return True
  141.